{
 "cells": [
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "### 一.基本原理：低维空间样本间距离与原始空间一致\n",
    "多维缩放（Multiple Dimensional Scaling,MDS）的基本思想很简单：降维后低维空间中样本间的**欧式距离**与原始空间中的距离保持一致，如下图所示，将三维空间数据压缩到二维空间，而不改变它们彼此之间的距离。\n",
    "![avatar](./source/19_mds.png)\n",
    "我们不妨设原始空间样本集为$X\\in R^{m\\times n}$，样本张成的距离矩阵为$D\\in R^{m\\times m}$,$D_{ij}$表示样本$x_i$与样本$x_j$之间的距离，降维后的样本集为$Z\\in R^{m\\times d}(d<<n)$，所以我们的目的是让如下关系式成立：   \n",
    "\n",
    "$$\n",
    "\\left|\\left|z_i-z_j\\right|\\right|=D_{ij}\n",
    "$$  \n",
    "\n",
    "为了方便处理，我们令$B=Z^TZ$(即$B_{ij}=z_i^Tz_j$)，那么上面的关系式可以等价为如下关系：   \n",
    "\n",
    "$$\n",
    "D_{ij}^2=\\left|\\left|z_i\\right|\\right|^2+\\left|\\left|z_j\\right|\\right|^2-2z_i^Tz_j=B_{ii}+B_{jj}-2B_{ij}\n",
    "$$  \n",
    "\n",
    "所以，我们的目标便是由$D$矩阵推导出$B$矩阵，然后再对$B$矩阵做正交分解得到$Z$，为了便于处理，我们假设$Z$被去中心化了，即$\\sum_{i=1}^mz_i=0$，那么有：   \n",
    "\n",
    "$$\n",
    "\\sum_{i=1}^mB_{ij}=\\sum_{j=1}^mB_{ij}=0\n",
    "$$  \n",
    "\n",
    "进一步地，有如下关系成立：   \n",
    "\n",
    "$$\n",
    "\\sum_{i=1}^mD_{ij}^2=tr(B)+mB_{jj}(关系1)\\\\\n",
    "\\sum_{j=1}^mD_{ij}^2=tr(B)+mB_{ii}(关系2)\\\\\n",
    "\\sum_{i=1}^m\\sum_{j=1}^mD_{ij}^2=2mtr(B)(关系3)\\\\\n",
    "$$  \n",
    "\n",
    "其中，$tr(B)=\\sum_{i=1}^mz_i^Tz_i$，通过关系1,2,3，我们可以得到$B$关于$D$表达式，为了进一步简化，我们可以令：   \n",
    "\n",
    "$$\n",
    "D_{i\\cdot}^2=\\frac{1}{m}\\sum_{j=1}^mD_{ij}^2\\\\\n",
    "D_{\\cdot j}^2=\\frac{1}{m}\\sum_{i=1}^mD_{ij}^2\\\\\n",
    "D_{\\cdot \\cdot}^2=\\frac{1}{m^2}\\sum_{i=1}^m\\sum_{j=1}^mD_{ij}^2\n",
    "$$  \n",
    "\n",
    "最后：   \n",
    "\n",
    "\n",
    "$$\n",
    "B_{ij}=-\\frac{1}{2}(D_{ij}^2-D_{i\\cdot}^2-D_{\\cdot j}^2+D_{\\cdot \\cdot}^2)\n",
    "$$  \n",
    "\n",
    "最后求$Z$就比较简单了，我们对$B$做特征分解$B=V\\Lambda V^T$，其中$\\Lambda=diag(\\lambda_1,\\lambda_2,...,\\lambda_n),\\lambda_1\\geq\\lambda_2\\geq\\cdots\\geq\\lambda_n$，而：  \n",
    "\n",
    "$$\n",
    "Z=V\\Lambda^{1/2}\n",
    "$$  \n",
    "\n",
    "与PCA,LDA类似地，我们通常只取$\\Lambda$中特征值较大的前几个，对应的$V$也只取前几列"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "### 二.代码实现\n",
    "\n",
    "我们先造一个伪数据"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 1,
   "metadata": {},
   "outputs": [],
   "source": [
    "from matplotlib import pyplot as plt\n",
    "from mpl_toolkits.mplot3d import Axes3D\n",
    "import numpy as np\n",
    "%matplotlib inline"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 2,
   "metadata": {},
   "outputs": [],
   "source": [
    "n = 200\n",
    "r = np.linspace(0,1,n)\n",
    "l = np.linspace(0,1,n)\n",
    "\n",
    "t = (3 * np.pi) / 2 * ( 1 + 2 * r )\n",
    "x =  t * np.cos(t)\n",
    "y = 10 * l\n",
    "z =t * np.sin(t)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 3,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "image/png": "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\n",
      "text/plain": [
       "<matplotlib.figure.Figure at 0x283f66d9a58>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "fig = plt.figure()\n",
    "ax1 = plt.axes(projection='3d')\n",
    "ax1.scatter3D(x,y,z, cmap='Blues')\n",
    "plt.show()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 4,
   "metadata": {},
   "outputs": [],
   "source": [
    "data=np.c_[x,y,z]"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "构建原始距离矩阵$D$，这里就用构建欧氏距离"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 5,
   "metadata": {},
   "outputs": [],
   "source": [
    "m=data.shape[0]\n",
    "D=np.zeros(shape=(m,m))"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 6,
   "metadata": {},
   "outputs": [],
   "source": [
    "for i in range(0,m):\n",
    "    for j in range(i,m):\n",
    "        D[i,j]=np.sqrt(np.sum(np.power(data[i]-data[j],2)))\n",
    "        D[j,i]=D[i,j]"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 7,
   "metadata": {},
   "outputs": [],
   "source": [
    "D_i=np.sum(np.power(D,2),axis=0)/m\n",
    "D_j=np.sum(np.power(D,2),axis=1)/m\n",
    "D_2=np.sum(np.power(D,2))/(m*m)"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "计算$B$矩阵"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 8,
   "metadata": {},
   "outputs": [],
   "source": [
    "B=np.zeros(shape=(m,m))\n",
    "for i in range(0,m):\n",
    "    for j in range(i,m):\n",
    "        B[i,j]=-0.5*(D[i,j]*D[i,j]-D_i[i]-D_j[j]+D_2)\n",
    "        B[j,i]=B[i,j]"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "对$B$进行特征分解，求Z"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 9,
   "metadata": {},
   "outputs": [],
   "source": [
    "eig_vals,eig_vecs=np.linalg.eig(B)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 10,
   "metadata": {},
   "outputs": [],
   "source": [
    "sorted_indice=np.argsort(-1*np.abs(eig_vals))\n",
    "eig_vals=eig_vals[sorted_indice]\n",
    "eig_vecs[:]=eig_vecs[:,sorted_indice]"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "保留前两维"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 11,
   "metadata": {},
   "outputs": [],
   "source": [
    "n_compnent=2\n",
    "Lambda=np.diag(eig_vals.real[:n_compnent])\n",
    "vecs=eig_vecs.real[:,:n_compnent]"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 12,
   "metadata": {},
   "outputs": [],
   "source": [
    "new_data=vecs.dot(np.sqrt(Lambda))"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 13,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "<matplotlib.collections.PathCollection at 0x283f881bf98>"
      ]
     },
     "execution_count": 13,
     "metadata": {},
     "output_type": "execute_result"
    },
    {
     "data": {
      "image/png": "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\n",
      "text/plain": [
       "<matplotlib.figure.Figure at 0x283f87d41d0>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "plt.scatter(new_data[:,0],new_data[:,1])"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "结果看起来还不错，同样地，将代码封装到`ml_models.decomposition.MDS`中"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {},
   "outputs": [],
   "source": []
  }
 ],
 "metadata": {
  "kernelspec": {
   "display_name": "Python 3",
   "language": "python",
   "name": "python3"
  },
  "language_info": {
   "codemirror_mode": {
    "name": "ipython",
    "version": 3
   },
   "file_extension": ".py",
   "mimetype": "text/x-python",
   "name": "python",
   "nbconvert_exporter": "python",
   "pygments_lexer": "ipython3",
   "version": "3.6.4"
  }
 },
 "nbformat": 4,
 "nbformat_minor": 2
}
